package com.ffggffgfv.backend.mapper;

import com.ffggffgfv.backend.entity.Shipping;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 物流信息数据访问层
 */
@Mapper
public interface ShippingMapper {

    /**
     * 插入物流信息
     *
     * @param shipping 物流信息
     * @return 影响行数
     */
    int insert(Shipping shipping);

    /**
     * 根据ID查询物流信息
     *
     * @param id 物流ID
     * @return 物流信息
     */
    Shipping selectById(Long id);

    /**
     * 根据订单ID查询物流信息
     *
     * @param orderId 订单ID
     * @return 物流信息
     */
    Shipping selectByOrderId(Long orderId);

    /**
     * 根据订单编号查询物流信息
     *
     * @param orderNo 订单编号
     * @return 物流信息
     */
    Shipping selectByOrderNo(String orderNo);

    /**
     * 更新物流信息
     *
     * @param shipping 物流信息
     * @return 影响行数
     */
    int update(Shipping shipping);

    /**
     * 更新物流状态
     *
     * @param id        物流ID
     * @param oldStatus 旧状态
     * @param newStatus 新状态
     * @return 影响行数
     */
    int updateStatus(@Param("id") Long id,
                     @Param("oldStatus") Integer oldStatus,
                     @Param("newStatus") Integer newStatus);

    /**
     * 更新物流单号和物流公司
     *
     * @param id              物流ID
     * @param trackingNo      物流单号
     * @param shippingCompany 物流公司
     * @return 影响行数
     */
    int updateTracking(@Param("id") Long id,
                       @Param("trackingNo") String trackingNo,
                       @Param("shippingCompany") String shippingCompany);
}
